package com.csap.framework.apidoc.model;

import com.csap.framework.properties.apidoc.ApiStatus;
import com.csap.framework.properties.apidoc.ParamType;
import com.csap.framework.util.CollectionsUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * @author yangchengfu
 * @description 文档方法信息
 * @dataTime 2019年-12月-28日 17:44:00
 **/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CsapDocMethod {
    /**
     * 名称描述
     */
    private String value;
    /**
     * 包含类名和方法名称 标识
     */
    private String key;
    /**
     * 实际名称
     */
    private String name;
    /**
     * url路径
     */
    private String[] paths;

    /**
     * controller路径
     */
    private String[] apiPath;
    /**
     * 描述
     */
    private String description;
    /**
     * 请求的类型
     *
     * @return
     */
    private List<RequestMethod> methods;
    /**
     * 筛选条件
     */
    private StringBuilder search;
    /**
     * 标签
     */
    private String[] tags;
    /**
     * 参数类型列表
     */
    private Set<String> paramTypes;
    /**
     * 参数类型
     */
    private ParamType paramType = ParamType.DEFAULT;
    /**
     * api状态
     */
    private ApiStatus status;
    /**
     * 请求的实体类
     */
    private List<CsapDocModel> request;
    /**
     * 返回的实体类
     */
    private List<CsapDocModel> response;
    /**
     * 方法头部文件
     */
    private List<CsapDocMethodHeaders> methodHeaders;
    /**
     * 当前类的所有API分组
     */
    private Set<String> group;
    /**
     * 所有 API版本
     */
    private Set<String> version;
    /**
     * 开发模式使用
     */
    private transient Boolean devTools;
    /**
     * 是否隐藏
     */
    private Boolean hidden;

    public void addRequest(List<CsapDocModel> request) {
        if (CollectionsUtil.isEmpty(this.request)) {
            this.request = new ArrayList<>();
        }
        this.request.addAll(request);
    }


}
